﻿using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using WatiN.Core;
using WatiN.Core.DialogHandlers;
using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;
using System.Data.Linq;
using tea.DB;
using tea.BL;
using Util;

namespace tea.Tests
{
    [TestClass]
    public class 이력서관리
    {
        [ClassInitialize]
        public static void DB테스트준비(TestContext context)
        {
            DB.초기화();
        }

        [TestMethod]
        public void 이력서관리테스트1()
        {
            IE ie = new IE("http://localhost:6378/Guest/Login?ReturnUrl=%2f");

            // 로그인하고
            로그인.로그인하기("staff", "staff", ie);

            // 이력서 화면으로 이동
            ie.Link(Find.ByText("이력서목록")).Click();
            Assert.IsTrue(ie.Url.Contains("/Resume/List"));
            Assert.AreEqual(ie.Eval("$('tbody tr').length"), "0");

            // 이력서 생성
            for (int i = 0; i < 31; ++i) {
                DB.사용자생성("test" + i, "test", "테스트" + i, "test" + i + "@test.com");
                DB.이력서생성("test" + i, "1980-01-" + ("0" + i).Right(2), i % 2 == 0 ? "여" : "남");
            }

            // 이력서 목록 새로고침
            ie.Link(Find.ByText("이력서목록")).Click();
            Assert.AreEqual(ie.Eval("$('div.pagination li').length"), "3");
            Assert.AreEqual(ie.Eval("$('tbody tr:first-child td:first-child').text()"), "테스트30");
            Assert.AreEqual(ie.Eval("$('tbody tr').length"), "15");

            // 마지막 페이지로 이동
            ie.Link(Find.BySelector("div.pagination li:last-child a")).Click();
            Assert.AreEqual(ie.Eval("$('tbody tr:first-child td:first-child').text()"), "테스트0");
            Assert.AreEqual(ie.Eval("$('tbody tr').length"), "1");

            // 정렬 테스트
            ie.SelectList(Find.ByName("pagination.order")).Select("이름");
            Assert.AreEqual(ie.Eval("$('tbody tr:first-child td:first-child').text()"), "테스트0");
            ie.Link(Find.BySelector("div.pagination li:last-child a")).Click();
            Assert.AreEqual(ie.Eval("$('tbody tr:first-child td:first-child').text()"), "테스트9");

            // 정렬 테스트
            ie.SelectList(Find.ByName("pagination.order")).Select("생년월일");
            Assert.AreEqual(ie.Eval("$('tbody tr:first-child td:first-child').text()"), "테스트0");
            ie.Link(Find.BySelector("div.pagination li:last-child a")).Click();
            Assert.AreEqual(ie.Eval("$('tbody tr:first-child td:first-child').text()"), "테스트30");

            // 검색
            ie.SelectList(Find.ByName("pagination.srchType")).Select("이름");
            ie.TextField(Find.ByName("pagination.srchText")).Value = "0";
            ie.Link(Find.ByText("검색")).Click();
            Assert.AreEqual(ie.Eval("$('tbody tr').length"), "4");
            Assert.AreEqual(ie.Eval("$('tbody tr:first-child td:first-child').text()"), "테스트0");
            Assert.AreEqual(ie.Eval("$('tbody tr:last-child td:first-child').text()"), "테스트30");

            // 검색취소
            ie.SelectList(Find.ByName("pagination.srchType")).Select("검색없음");
            ie.Link(Find.ByText("검색")).Click();
            Assert.AreEqual(ie.Eval("$('div.pagination li').length"), "3");
            Assert.AreEqual(ie.Eval("$('tbody tr:first-child td:first-child').text()"), "테스트0");
            Assert.AreEqual(ie.Eval("$('tbody tr').length"), "15");

            // 화면크기
            ie.SelectList(Find.ByName("pagination.size")).Select("50");
            Assert.AreEqual(ie.Eval("$('div.pagination li').length"), "1");
            Assert.AreEqual(ie.Eval("$('tbody tr').length"), "31");

            // 이력서 팝업
            ie.TableRow(Find.BySelector("tbody tr:first-child")).Click();
            IE ie2 = IE.AttachTo<IE>(Find.ByTitle("이력서"));

            ie.WaitForComplete();
            ie.Dispose();

            Assert.IsTrue(ie2.ContainsText("인적사항"));
            Assert.IsTrue(ie2.ContainsText("테스트0"));

            ie2.WaitForComplete();
            ie2.Dispose();
        }
    }
}
